golang语言强制类型转换 您所在的位置:网站首页 golang 基本类型 转换为protobuf golang语言强制类型转换

golang语言强制类型转换

#golang语言强制类型转换| 来源: 网络整理| 查看: 265

文章目录 前言golang强制类型转换类型断言类型转换指针类型转换 总结引用

前言

golang是强类型语言,有强制类型转换,但是不同于Java语言所使用的强制类型转换。

golang强制类型转换

golang语言中分为类型转换(type conversion)、类型断言(type assertion)和指针类型转换。

类型断言 package main import "fmt" func main() { var a interface{} =10 t,ok:= a.(int) if ok{ fmt.Println("int",t) } t2,ok:= a.(float32) if ok{ fmt.Println("float32",t2) } } 打印结果是:int 10 因为 golang 自动推断 a 是 int 类型。 (这个更像是Java的强制类型转换,认为变量 a 是 int 类型,就强转为 int 类型来使用) 类型转换 package main import "fmt" func main() { var a float32 = 5.6 var b int = 10 fmt.Println (a * float32(b)) }

代码段中的 float32(b) 就是第二种强制类型转换, 普通变量类型int,float,string 都可以使用 type (a)这种形式来进行强制类型转换,比如

var a int32 = 10 var b int64 = int64(a) var c float32 = 12.3 var d float64 =float64(c)

这种类型转换形式更像是Java的通过构造类的构造方法创建一个新类型对象。在Java语法中不属于强制类型转换。

指针类型转换 package main func main() { var a int = 10 var p *int =&a var c *int64 c= (*int64)(p) }

这样的代码是错误的,编译器会提示cannot convert p (type *int) to type *int64 指针的强制类型转换需要用到unsafe包中的函数实现

package main import "unsafe" import "fmt" func main() { var a int =10 var b *int =&a var c *int64 = (*int64)(unsafe.Pointer(b)) fmt.Println(*c) } 总结

golang中的强制类型转换有三种语法形式,分别是 类型断言,类型转换,指针类型转换,语法上类型断言和指针类型转换和Java比较像。 golang和Java的强制类型转换可以对比着理解,但是不同语言设计思想不同,不能硬类比。

引用 https://studygolang.com/articles/21591?fr=sidebarhttps://blog.csdn.net/github_37459410/article/details/81141339


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有